
package model;

import java.util.ArrayList;
import model.persistencia.CategoriaDAO;

public class CategoriaModel implements ICategoria{
    
    private int codigo;
    private String descricao;
    private CategoriaDAO categoriaDAO;
    private ArrayList observers;
    private static CategoriaModel instance = null;

    public synchronized static CategoriaModel getInstance(){
        if (instance == null) {
            instance = new CategoriaModel();
        }
        return instance;
    }

    public CategoriaModel() {
        observers = new ArrayList();
        categoriaDAO = new CategoriaDAO(this);         
    }
       
    public CategoriaModel(int codigo, String descricao) {
        this.codigo = codigo;
        this.descricao = descricao;
        notificarObservers();
    }    
    
    @Override
    public void setProximoCodigo(){        
        int proximoCodigo = categoriaDAO.getCodigo(SQL_ULTIMO,0) + 1;
        this.codigo = proximoCodigo;
    }
    
    @Override
    public CategoriaModel getCategoria(int codigo) {
        return categoriaDAO.getObject(codigo);
    }
    
    @Override
    public ArrayList getAll() {        
        return pesquisar(SQL_GETALL, "0");
    }
    
    //<editor-fold defaultstate="collapsed" desc="GET E SET METODOS">
    @Override
    public int getCodigo() {
        return codigo;
    }
    
    @Override
    public void setCodigo(int codigo) {
        this.codigo = codigo;
    }
    
    @Override
    public String getDescricao() {
        return descricao;
    }
    
    @Override
    public void setDescricao(String descricao) {
        this.descricao = descricao;
    }
    //</editor-fold>
    
    //<editor-fold defaultstate="collapsed" desc="GRUD">
    @Override
    public void inserir(){
        categoriaDAO.inserir();
        notificarObservers();
    }
    
    @Override
    public void atualizar(){
        categoriaDAO.atualizar();
        notificarObservers();
    }
    
    @Override
    public void excluir(){
        categoriaDAO.excluir();
        notificarObservers();
    }
    
    @Override
    public ArrayList pesquisar(int iOpcao, String iPesquisa) {
        return categoriaDAO.pesquisar(iOpcao, iPesquisa);
    }
    //</editor-fold>
        
    //<editor-fold defaultstate="collapsed" desc="OBSERVER">
    @Override
    public void registrarObserver(Observer o) {
        observers.add(o);
    }
    
    @Override
    public void removerObserver(Observer o) {
        int i = observers.indexOf(o);
        if (i >= 0){
            observers.remove(i);
        }
    }
    
    @Override
    public void notificarObservers() {
        for (int i = 0;i < observers.size();i++){
            Observer observer = (Observer) observers.get(i);
            observer.update();
        }
    }
    //</editor-fold>
    
}
